package main

import (
	"fmt"
	"sync"
)

func test1() {
	for i := 0; i < 10; i++ {
		fmt.Println("test1方法，你好golang")
		//time.Sleep(time.Millisecond * 100)
	}
	wg.Done() //计数器-1
}

func test2() {
	for i := 0; i < 10; i++ {
		fmt.Println("test2方法，你好golang")
		//time.Sleep(time.Millisecond * 100)
	}
	wg.Done() //计数器-1
}

//定义一个waitgroup计数器
var wg sync.WaitGroup

func main() {
	//wg.Add(2)	//计数器+1
	//go test1()
	//go test2()
	//wg.Wait()	//阻塞主线程，计数器归零时，停止阻塞

	//开多个协程，结合匿名函数，defer关键字
	for i := 0; i < 10; i++ {
		wg.Add(1)
		go func(i int) {
			//defer用于函数执行完，最后执行
			//常用场景：关闭文件句柄，关闭连接
			defer wg.Done()
			fmt.Println(i)
		}(i)
	}
	wg.Wait()
	fmt.Println("主线程退出")
}
